Skip to content

Update dependency multidict to v6.8.0 - #27

Open
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/multidict-6.x
Open

Update dependency multidict to v6.8.0#27
renovate[bot] wants to merge 1 commit into
mainfrom
renovate/multidict-6.x

Conversation

@renovate

@renovate renovate Bot commented Sep 10, 2024

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Change Age Confidence
multidict ==6.0.5==6.8.0 age confidence

Release Notes

aio-libs/multidict (multidict)

v6.8.0

Compare Source

=====

(2026-09-09)

Bug fixes

  • A segmentation fault that could be triggered when getting an item is now fixed
    -- by :user:Vizonex.

    Related issues and pull requests on GitHub:
    :issue:1310.

  • Fixed reference leak in iterators, views and istr
    -- by :user:Vizonex.

    Related issues and pull requests on GitHub:
    :issue:1311.

  • Fixed the pure-Python :class:~multidict.MultiDict constructor and
    :py:meth:~multidict.MultiDict.extend,
    :py:meth:~multidict.MultiDict.update, and
    :py:meth:~multidict.MultiDict.merge methods over-allocating their
    internal hash table when called with both a positional argument and
    keyword arguments, because keyword arguments were counted twice in the
    size estimate -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1338.

  • Fixed __repr__ of :class:~multidict.MultiDict,
    :class:~multidict.CIMultiDict, their proxies, and the keys/items views
    producing invalid output when keys contained quote characters --
    keys are now formatted with :func:repr so the result is a valid Python
    string literal -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1342.

  • Fixed a segfault when calling :py:meth:~multidict.MultiDict.add with only one of its two required arguments supplied by keyword, e.g. d.add(key="k"). Extra keyword arguments passed to the lookup and removal methods are also now rejected with :exc:TypeError instead of being silently ignored.

    -- by :user:devdanzin

    Related issues and pull requests on GitHub:
    :issue:1376.

  • Fixed a segfault when constructing a multidict iterator type directly, e.g. type(iter(md.keys())).__new__(...). Such an iterator had a NULL internal pointer that next() dereferenced. The iterator types now forbid direct instantiation, the same way the view types were fixed in :issue:1163.

    -- by :user:devdanzin

    Related issues and pull requests on GitHub:
    :issue:1377.

  • Fixed a segfault when using a :py:class:~multidict.MultiDict or :py:class:~multidict.CIMultiDict created via __new__ without calling __init__ (for example a subclass that does not call super().__init__()). The internal state was left as NULL pointers that the first method call dereferenced. tp_new now initializes the object to a valid empty mapping.

    -- by :user:devdanzin

    Related issues and pull requests on GitHub:
    :issue:1378.

  • Fixed two crashes in the C extension caused by holding a raw pointer into a hash table across an operation that could reshape it. Updating a multidict from itself (e.g. d.extend(d)) freed the very table being iterated -- a use-after-free; extend(self) now doubles the contents and update(self)/merge(self) are no-ops. Building a multidict from a list of pairs whose case-insensitive key .lower() shrinks that list read past the end of the list; the length is now re-checked on every iteration.

    -- by :user:devdanzin

    Related issues and pull requests on GitHub:
    :issue:1379.

  • Fixed three reference/resource leaks on error paths in the C extension: the items-view __contains__ leaked the first element of a candidate pair when reading the second one raised; __repr__ leaked its PyUnicodeWriter when the multidict was mutated during iteration; and the internal iteration helper leaked the identity reference when key materialization failed under low memory.

    -- by :user:devdanzin

    Related issues and pull requests on GitHub:
    :issue:1381.

  • Stopped several feature-detection fallbacks in the C extension from swallowing every exception. When probing an argument (arg.items()/arg.keys()) or measuring it (len(other)) fails, the code now clears only the expected :exc:TypeError/:exc:AttributeError and lets everything else -- notably :exc:MemoryError and :exc:KeyboardInterrupt -- propagate, matching the already-correct sites elsewhere in the module.

    -- by :user:devdanzin

    Related issues and pull requests on GitHub:
    :issue:1382.

  • Fixed a segmentation fault when extending a multidict with itself
    -- by :user:cananoo and :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1398.

  • Fixed a memory leak when MultiDict and CIMultiDict instances are
    initialized more than once -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1412.

  • Fixed a reference leak in items-view set operations
    -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1413.

  • Fixed a memory leak when destroying C-extension multidict instances
    and proxies -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1415.

  • Fixed a reference leak from repeated __init__ calls on
    MultiDictProxy and CIMultiDictProxy instances -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1419.

  • Fixed missing decref for :data:None on error in :meth:~multidict.MultiDict.setdefault
    -- by :user:asvetlov

    Related issues and pull requests on GitHub:
    :issue:1421.

Features

  • Added :py:func:reversed support to the keys, values, and items views of
    :class:~multidict.MultiDict, :class:~multidict.CIMultiDict, and their
    proxies in both the C-extension and pure-Python implementations
    -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:448.

  • Optimized key identity comparison for C Extension.

    Now it uses fast path that is equal to :c:func:PyUnicode_Equal from
    Python 3.14+ but without redundant type checks. It gives ~15% speed-up on benchmarks with many key comparisons.

    -- by :user:asvetlov

    Related issues and pull requests on GitHub:
    :issue:1406.

  • Changed both the pure-Python and C implementations to mark a temporarily
    removed hash table entry by setting the high bit of its hash instead of
    overwriting it with a sentinel value, so restoring the entry no longer
    recomputes the hash; :meth:~multidict.MultiDict.getall is faster ~10% now in C version
    -- by :user:asvetlov

    Related issues and pull requests on GitHub:
    :issue:1426.

Removals and backward incompatible breaking changes

  • Dropped support for Python 3.9 as it has reached end of life.

    Related issues and pull requests on GitHub:
    :issue:1316.

  • Dropped support for free-threaded Python 3.13 -- by :user:ngoldbaum.

    Related issues and pull requests on GitHub:
    :issue:1326.

Improved documentation

  • Fixed CIMultiDictProxy documentation to state it inherits from
    MultiDictProxy (not MultiDict), and fixed missing word in
    istr section -- by :user:veeceey.

    Related issues and pull requests on GitHub:
    :issue:1298.

  • Clarified that istr preserves the original casing and
    compares as a regular str; case-insensitive matching is
    handled by CIMultiDict -- by :user:gyanu2507.

    Related issues and pull requests on GitHub:
    :issue:1397.

  • Fixed broken RST markup in items() docstrings
    -- by :user:veeceey.

    Related issues and pull requests on GitHub:
    :issue:1299.

Packaging updates and notes for downstreams

  • Dropped support for free-threaded Python 3.13 -- by :user:ngoldbaum.

    Related issues and pull requests on GitHub:
    :issue:1326.

  • Wheels for iOS and Android (CPython 3.13+) are now published on
    release-tag builds, so downstreams on those platforms no longer need a
    local compiler to install multidict; these wheels are build-verified
    only, since running the test suite on mobile needs a simulator or an
    emulator -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1337.

  • Added support for building and shipping riscv64 wheels
    -- by :user:justeph.

    Related issues and pull requests on GitHub:
    :issue:1293.

  • The setuptools build dependency lower bound has been restored to be
    >= 47 after an incorrect automated increase in :pr:1315
    -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1400.

Contributor-facing changes

  • Added support for collecting code coverage of isolated multidict tests
    -- by :user:Vizonex.

    Related issues and pull requests on GitHub:
    :issue:1314.

  • Switched to mirrors-clang-format and enabled clang-format in pre-commit.ci
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1318.

  • Added a release-tag-gated CI job that cross-compiles the C extension
    for iOS and Android through cibuildwheel -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1337.

  • Added an AGENTS.md orientation file at the repository root, covering the
    pull request template, the CHANGES/ news fragment conventions, the
    draft-PR / human-review workflow, and the dual pure-Python and C-extension
    parity rule, so LLM contributors land changes that match project style
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1339.

  • Added init, installable, instantiation, parametrization,
    parametrized, postfix, and unparseable to the docs spelling list
    so news fragments and docs can use these words without failing the spell
    check build -- by :user:pctablet505.

    Related issues and pull requests on GitHub:
    :issue:1343.

  • Documented three common agent failure modes in
    :file:AGENTS.md: the docs spell check
    (make doc-spelling) catches unknown words in news fragments
    before CI does; coverage runs over the test tree too, so
    unreachable defensive raise guards and one-sided cleanup
    branches in tests will surface as uncovered on the codecov
    patch report; and branch creation is restricted on
    aio-libs/multidict, so PRs must be pushed from a fork
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1343, :issue:1345.

  • Trimmed the CI test matrix to drop redundant Py_DEBUG jobs on
    macOS and Windows and to gate the windows-11-arm wheel build to
    release-time only, cutting CI wall-clock by roughly a third without
    reducing code coverage -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1346.

  • Added a CLAUDE.md at the repository root that imports
    :file:AGENTS.md via Claude Code's @-syntax, so the
    project's LLM contributor rules load automatically when
    working in Claude Code
    -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1347.

  • Enabled the I (import sorting) rule in
    [tool.ruff.lint] so ruff check covers import order on top
    of the existing UP (pyupgrade) group, and updated the
    ruff-check pre-commit hook to run with
    --fix --exit-non-zero-on-fix --show-fixes so import-order
    fixes apply on commit. Sorted imports in four tests/ files
    to match the new rule -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1348.

  • Enabled the PLC0415 (import-outside-top-level) rule in
    [tool.ruff.lint]. Function-scoped imports must now opt in
    with # noqa: PLC0415 plus a comment explaining the reason
    (typically avoiding a heavy optional dependency at import time).
    This catches a pattern that LLM contributors frequently introduce.
    There are currently no opt-outs in the tree, so the rule is
    enforced everywhere ruff check runs
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1349.

  • Switched the cibuildwheel build frontend to build[uv] so
    that uv provisions every build and test virtual environment
    in the wheel matrix. Test-dependency installation in particular
    drops from a multi-second pip install per ABI to a roughly
    sub-second uv resolve
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1350.

  • Overrode CIBW_BUILD_FRONTEND=build for the odd-arch wheel
    matrix; the upstream manylinux/musllinux images for
    those arches do not ship uv
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1352.

  • Allowed re-running the deploy job after a partial release failure: the
    Make Release step now skips when the GitHub Release already exists,
    and the PyPI publish step uses skip-existing so dists that were
    already uploaded on a prior attempt do not break the retry
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1353.

  • Switched the aarch64 and armv7l wheel builds to GitHub's native ARM
    runners. The aarch64 wheels now build without QEMU emulation, and
    armv7l runs on aarch64 hosts so its 32-bit ARM execution is far
    cheaper than the previous aarch64-on-x86_64 path
    -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1354.

  • Documented design principles for pure-Python :class:~multidict.istr implementation
    -- by :user:asvetlov

    Related issues and pull requests on GitHub:
    :issue:1360.

  • Pinned coverage to the ctrace measurement core so the test suite runs
    on Python 3.14. Coverage picks sysmon there, which cannot record the
    dynamic contexts pytest-cov switches at runtime, and the resulting warning
    became an error under the suite's filterwarnings setting
    -- by :user:rodrigobnogueira.

    Related issues and pull requests on GitHub:
    :issue:1393.

  • Dependabot has been restricted to the requirements subdirectory to
    avoid unintended updates outside dependency requirement files
    -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1400.

  • Enabled automatic upgrades from ruff after each python version that is dropped
    -- by :user:Vizonex.

    Related issues and pull requests on GitHub:
    :issue:1325.

Miscellaneous internal changes

  • Explicitly marked empty_htkeys as const.

    Moved the structure to .rodata linker section.

    Unexpected modification of the structure will lead to segfault instead
    of corrupting the data and fail fast.

    .rodata is mount as read-only-mapped, it is shared well across
    multiple threads without cache misses.

    The change is pretty trivial, it is made for the sake of correctness,
    not for speedup.

    -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1405.

  • Slightly reorganized multidict creating process.

    1. Removed unnecessary calculations when md_init() creates an empty multidict.
    2. Now tp_alloc slot is used in object cloning instead of bare :c:func:PyType_GenericNew call.

    -- by :user:asvetlov

    Related issues and pull requests on GitHub:
    :issue:1420.

  • Dropped dead code, _md_del_at() and _md_del_at_for_upd() never fails
    -- by :user:asvetlov

    Related issues and pull requests on GitHub:
    :issue:1423.

  • Fixed a missing space in the :exc:ValueError message
    raised when constructing a multidict from a sequence
    -- by :user:veeceey.

    Related issues and pull requests on GitHub:
    :issue:1295.

  • Renamed the benchmark script from benchmarks/becnhmark.py to
    benchmarks/benchmark.py so it matches the invocation documented in
    :doc:benchmark -- by :user:aiolibsbot.

    Related issues and pull requests on GitHub:
    :issue:1335.


v6.7.1

Compare Source

=====

(2026-01-25)

Bug fixes

  • Fixed slow memory leak caused by identity by adding Py_DECREF to identity value before leaving md_pop_one on success
    -- by :user:Vizonex.

    Related issues and pull requests on GitHub:
    :issue:1284.


v6.7.0

Compare Source

=====

(2025-10-05)

Contributor-facing changes

  • Updated tests and added CI for CPython 3.14 -- by :user:kumaraditya303.

    Related issues and pull requests on GitHub:
    :issue:1235.


v6.6.4

Compare Source

=====

(2025-08-11)

Bug fixes

  • Fixed MutliDict & CIMultiDict memory leak when deleting values or clearing them
    -- by :user:Vizonex

    Related issues and pull requests on GitHub:
    :issue:1233.

Contributor-facing changes

  • The type preciseness coverage report generated by MyPy <https://mypy-lang.org>__ is now uploaded to Coveralls <https://coveralls.io/github/aio-libs/multidict>__ and
    will not be included in the Codecov views <https://app.codecov.io/gh/aio-libs/multidict>__ going forward
    -- by :user:webknjaz.

    Related issues and pull requests on GitHub:
    :issue:1122, :issue:1231.

  • Added memory leak test for popping or deleting attributes from a multidict to prevent future issues or bogus claims.
    -- by :user:Vizonex

    Related issues and pull requests on GitHub:
    :issue:1233.


v6.6.3

Compare Source

=====

(2025-06-30)

Bug fixes

  • Fixed inconsistencies generated by the C implementation of _md_shrink() which might later lead to assertion failures and crash -- by :user:Romain-Geissler-1A.

    Related issues and pull requests on GitHub:
    :issue:1229.


v6.6.2

Compare Source

=====

(2025-06-28)

Bug fixes

  • Fixed a memory corruption issue in the C implementation of _md_shrink() that could lead to segmentation faults and data loss when items were deleted from a :class:~multidict.MultiDict. The issue was an edge case in the pointer arithmetic during the compaction phase -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1221, :issue:1222.

  • Fixed format string compilation errors in debug builds on 32-bit platforms by using portable %zd format specifiers for Py_ssize_t values instead of %ld -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1225, :issue:1226.

Packaging updates and notes for downstreams

  • Re-enabled 32-bit Linux wheel builds that were disabled by default in cibuildwheel 3.0.0 -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1225, :issue:1227.


v6.6.1

Compare Source

=====

(2025-06-28)

Bug fixes

  • If :meth:multidict.MultiDict.extend, :meth:multidict.MultiDict.merge, or :meth:multidict.MultiDict.update raises an exception, now the multidict internal state is correctly restored.
    Patch by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1215.

Contributor-facing changes

  • Fixed setuptools deprecation warning about the license specification -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1216.

  • Fix compiler warnings and convert them to errors -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1217.


v6.6.0

Compare Source

=====

(2025-06-27)

Features

  • Added :meth:multidict.MultiDict.merge which copies all items from arguments if its key
    not exist in the dictionary -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:292.

  • Stopped reallocating memory for the internal htkeys_t structure when inserting new items if the
    multidict has deleted items and it could be collapsed in-place. Removal of
    malloc()/free() improves the performance slightly.

    The change affects C implementation only, pure Python code is not changed.

    Patch by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1200.

  • C implementation of :class:multidict.MultiDict.getall now is slightly faster if it returns nothing -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1212.

Improved documentation

  • Replaced docstring for :meth:multidict.MultiDict.update to don't use RST/markdown markup.

    Related issues and pull requests on GitHub:
    :issue:1203.

  • Improved documentation for :meth:multidict.MultiDict.extend and :meth:multidict.MultiDict.update -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1205.

Contributor-facing changes

  • When building wheels, the source distribution is now passed directly
    to the cibuildwheel invocation -- by :user:webknjaz.

    Related issues and pull requests on GitHub:
    :issue:1199.

  • Set up PYTHONHASHSEED for benchmarks execution to make measured times stable -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1202.


v6.5.1

Compare Source

=====

(2025-06-24)

Bug fixes

  • Fixed a bug in C implementation when multidict is resized and it has deleted slots.

    The bug was introduced by multidict 6.5.0 release.

    Patch by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1195.

Contributor-facing changes

  • A pair of code formatters for Python and C have been configured in the pre-commit tool.

    Related issues and pull requests on GitHub:
    :issue:1123.

  • Shorted fixture parametrization ids.

    For example, test_keys_view_xor[case-insensitive-pure-python-module] becomes test_keys_view_xor[ci-py] -- by :user:asvetlov.

    Related issues and pull requests on GitHub:
    :issue:1192.

  • The :file:reusable-cibuildwheel.yml workflow has been refactored to
    be more generic and :file:ci-cd.yml now holds all the configuration
    toggles -- by :user:webknjaz.

    Related issues and pull requests on GitHub:
    :issue:1193.


v6.5.0

Compare Source

=====

(2025-06-17)

.. note::

The release was yanked because of :issue:1195, multidict 6.5.1 should be used
instead.

Features

  • Replace internal implementation from an array of items to hash table.
    algorithmic complexity for lookups is switched from O(N) to O(1).

    The hash table is very similar to :class:dict from CPython but it allows keys duplication.

    The benchmark shows 25-50% boost for single lookups, x2-x3 for bulk updates, and x20 for
    some multidict view operations. The gain is not for free:
    :class:~multidict.MultiDict.add and :class:~multidict.MultiDict.extend are 25-50%
    slower now. We consider it as acceptable because the lookup is much more common
    operation that addition for the library domain.

    Related issues and pull requests on GitHub:
    :issue:1128.

Contributor-facing changes

  • Builds have been added for arm64 Windows
    wheels and the reusable-build-wheel.yml
    template has been modified to allow for
    an os value (windows-11-arm) which
    does not end with the -latest postfix.

    Related issues and pull requests on GitHub:
    :issue:1167.


v6.4.4

Compare Source

=====

(2025-05-19)

Bug fixes

  • Fixed a segmentation fault when calling :py:meth:multidict.MultiDict.setdefault with a single argument -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1160.

  • Fixed a segmentation fault when attempting to directly instantiate view objects
    (multidict._ItemsView, multidict._KeysView, multidict._ValuesView) -- by :user:bdraco.

    View objects now raise a proper :exc:TypeError with the message "cannot create '...' instances directly"
    when direct instantiation is attempted.

    View objects should only be created through the proper methods: :py:meth:multidict.MultiDict.items,
    :py:meth:multidict.MultiDict.keys, and :py:meth:multidict.MultiDict.values.

    Related issues and pull requests on GitHub:
    :issue:1164.

Miscellaneous internal changes

  • :class:multidict.MultiDictProxy was refactored to rely only on
    :class:multidict.MultiDict public interface and don't touch any implementation
    details.

    Related issues and pull requests on GitHub:
    :issue:1150.

  • Multidict views were refactored to rely only on
    :class:multidict.MultiDict API and don't touch any implementation
    details.

    Related issues and pull requests on GitHub:
    :issue:1152.

  • Dropped internal _Impl class from pure Python implementation, both pure Python and C
    Extension follows the same design internally now.

    Related issues and pull requests on GitHub:
    :issue:1153.


v6.4.3

Compare Source

=====

(2025-04-10)

Bug fixes

  • Fixed building the library in debug mode.

    Related issues and pull requests on GitHub:
    :issue:1144.

  • Fixed custom PyType_GetModuleByDef() when non-heap type object was passed.

    Related issues and pull requests on GitHub:
    :issue:1147.

Packaging updates and notes for downstreams

  • Added the ability to build in debug mode by setting :envvar:MULTIDICT_DEBUG_BUILD in the environment -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1145.


v6.4.2

Compare Source

=====

(2025-04-09)

Bug fixes

  • Fixed a segmentation fault when creating subclassed :py:class:~multidict.MultiDict objects on Python < 3.11 -- by :user:bdraco.

    The problem first appeared in 6.4.0

    Related issues and pull requests on GitHub:
    :issue:1141.


v6.4.1

Compare Source

=====

(2025-04-09)

No significant changes.


v6.4.0

Compare Source

=====

(2025-04-09)

Bug fixes

  • Fixed a memory leak creating new :class:~multidict.istr objects -- by :user:bdraco.

    The leak was introduced in 6.3.0

    Related issues and pull requests on GitHub:
    :issue:1133.

  • Fixed reference counting when calling :py:meth:multidict.MultiDict.update -- by :user:bdraco.

    The leak was introduced in 4.4.0

    Related issues and pull requests on GitHub:
    :issue:1135.

Features

  • Switched C Extension to use heap types and the module state.

    Related issues and pull requests on GitHub:
    :issue:1125.

  • Started building armv7l wheels -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1127.


v6.3.2

Compare Source

=====

(2025-04-03)

Bug fixes

  • Resolved a memory leak by ensuring proper reference count decrementation -- by :user:asvetlov and :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1121.


v6.3.1

Compare Source

=====

(2025-04-01)

Bug fixes

  • Fixed keys not becoming case-insensitive when :class:multidict.CIMultiDict is created by passing in a :class:multidict.MultiDict -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1112.

  • Fixed the pure Python version mutating the original :class:multidict.MultiDict when creating a new :class:multidict.CIMultiDict from an existing one when keyword arguments are also passed -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1113.

  • Prevented crashing with a segfault when :func:repr is called for recursive multidicts and their proxies and views.

    Related issues and pull requests on GitHub:
    :issue:1115.


v6.3.0

Compare Source

=====

(2025-03-31)

Bug fixes

  • Set operations for KeysView and ItemsView of case-insensitive multidicts and their proxies are processed in case-insensitive manner.

    Related issues and pull requests on GitHub:
    :issue:965.

  • Rewrote :class:multidict.CIMultiDict and it proxy to always return
    :class:multidict.istr keys. istr is derived from :class:str,
    thus the change is backward compatible.

    The performance boost is about 15% for some operations for C Extension,
    pure Python implementation have got a visible (15% - 230%) speedup as well.

    Related issues and pull requests on GitHub:
    :issue:1097.

  • Fixed a crash when extending a multidict from multidict proxy if C Extensions were used.

    Related issues and pull requests on GitHub:
    :issue:1100.

Features

  • Implemented a custom parser for METH_FASTCALL | METH_KEYWORDS protocol
    -- by :user:asvetlov.

    The patch re-enables fast call protocol in the :py:mod:multidict C Extension.

    Speedup is about 25%-30% for the library benchmarks for Python 3.12+.

    Related issues and pull requests on GitHub:
    :issue:1070.

  • The C-extension no longer pre-allocates a Python exception object in
    lookup-related methods of :py:class:~multidict.MultiDict when the
    passed-in key is not found but default value is provided.

    Namely, this affects :py:meth:MultiDict.getone() <multidict.MultiDict.getone>, :py:meth:MultiDict.getall() <multidict.MultiDict.getall>, :py:meth:MultiDict.get() <multidict.MultiDict.get>, :py:meth:MultiDict.pop() <multidict.MultiDict.pop>, :py:meth:MultiDict.popone() <multidict.MultiDict.popone>, and :py:meth:MultiDict.popall() <multidict.MultiDict.popall>.

    Additionally, the :py:class:~multidict.MultiDict comparison with
    regular :py:class:dict\ ionaries is now about 60% faster
    on Python 3.13+ in the fallback-to-default case.

    Related issues and pull requests on GitHub:
    :issue:1078.

  • Implemented __repr__() for C Extension classes in C.

    The speedup is about 2.5 times.

    Related issues and pull requests on GitHub:
    :issue:1081.

  • Made C version of :class:multidict.istr pickleable.

    Related issues and pull requests on GitHub:
    :issue:1098.

  • Optimized multidict creation and extending / updating if C Extensions are used.

    The speedup is between 25% and 70% depending on the usage scenario.

    Related issues and pull requests on GitHub:
    :issue:1101.

  • :meth:multidict.MultiDict.popitem is changed to remove
    the latest entry instead of the first.

    It gives O(1) amortized complexity.

    The standard :meth:dict.popitem removes the last entry also.

    Related issues and pull requests on GitHub:
    :issue:1105.

Contributor-facing changes

  • Started running benchmarks for the pure Python implementation in addition to the C implementation -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1092.

  • The the project-wide Codecov_ metric is no longer reported
    via GitHub Checks API. The combined value is not very useful
    because one of the sources (MyPy) cannot reach 100% with the
    current state of the ecosystem. We may want to reconsider in
    the future. Instead, we now have two separate
    “runtime coverage” metrics for library code and tests.
    They are to be kept at 100% at all times.
    And the “type coverage” metric will remain advisory, at a
    lower threshold.

    The default patch metric check is renamed to “runtime”
    to better reflect its semantics. This one will also require
    100% coverage.
    Another “typing” patch coverage metric is now reported
    alongside it. It's considered advisory, just like its
    project counterpart.

    When looking at Codecov_, one will likely want to look at
    MyPy and pytest flags separately. It is usually best to
    avoid looking at the PR pages that sometimes display
    combined coverage incorrectly.

    The change additionally disables the deprecated GitHub
    Annotations integration in Codecov_.

    Finally, the badge coloring range now starts at 100%.

    .. image:: https://codecov.io/gh/aio-libs/multidict/branch/master/graph/badge.svg?flag=pytest
    :target: https://codecov.io/gh/aio-libs/multidict?flags[]=pytest
    :alt: Coverage metrics

    -- by :user:webknjaz

    Related issues and pull requests on GitHub:
    :issue:1093.

Miscellaneous internal changes

  • Synchronized :file:pythoncapi_compat.h with the latest available version.

    Related issues and pull requests on GitHub:
    :issue:1063.

  • Moved registering ABCs for C Extension classes from C to Python.

    Related issues and pull requests on GitHub:
    :issue:1083.

  • Refactored the internal pair_list implementation.

    Related issues and pull requests on GitHub:
    :issue:1084.

  • Implemented views comparison and disjoints in C instead of Python helpers.

    The performance boost is about 40%.

    Related issues and pull requests on GitHub:
    :issue:1096.


v6.2.0

Compare Source

======

(2025-03-17)

Bug fixes

  • Fixed in checks throwing an exception instead of returning :data:False when testing non-strings.

    Related issues and pull requests on GitHub:
    :issue:1045.

  • Fixed a leak when the last accessed module in PyInit__multidict() init is not released.

    Related issues and pull requests on GitHub:
    :issue:1061.

Features

  • Implemented support for the free-threaded build of CPython 3.13 -- by :user:lysnikolaou.

    Related issues and pull requests on GitHub:
    :issue:1015.

Packaging updates and notes for downstreams

  • Started publishing wheels made for the free-threaded build of CPython 3.13 -- by :user:lysnikolaou.

    Related issues and pull requests on GitHub:
    :issue:1015.

Miscellaneous internal changes

  • Used stricter typing across the code base, resulting in improved typing accuracy across multidict classes.
    Funded by an NLnet grant.

    Related issues and pull requests on GitHub:
    :issue:1046.


v6.1.0

Compare Source

==================

Bug fixes

  • Covered the unreachable code path in
    multidict._multidict_base._abc_itemsview_register()
    with typing -- by :user:skinnyBat.

    Related issues and pull requests on GitHub:
    :issue:928.

Features

  • Added support for Python 3.13 -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:1002.

Removals and backward incompatible breaking changes

  • Removed Python 3.7 support -- by :user:bdraco.

    Related issues and pull requests on GitHub:
    :issue:997.

Contributor-facing changes

  • Added tests to have full code coverage of the
    multidict._multidict_base._viewbaseset_richcmp() function
    -- by :user:skinnyBat.

    Related issues and pull requests on GitHub:
    :issue:928.

  • The deprecated <https://hynek.me/til/set-output-deprecation-github-actions/>_
    ::set-output workflow command has been replaced
    by the $GITHUB_OUTPUT environment variable
    in the GitHub Actions CI/CD workflow definition.

    Related issues and pull requests on GitHub:
    :issue:940.

  • codecov-action <https://github.com/codecov/codecov-action>_
    has been temporarily downgraded to v3
    in the GitHub Actions CI/CD workflow definitions
    in order to fix uploading coverage to Codecov_.
    See this issue <https://github.com/codecov/codecov-action/issues/1252>_
    for more details.

    .. _Codecov: https://codecov.io/gh/aio-libs/multidict?flags[]=pytest

    Related issues and pull requests on GitHub:
    :issue:941.

  • In the GitHub Actions CI/CD workflow definition,
    the Get pip cache dir step has been fixed for
    Windows runners by adding shell: bash.
    See actions/runner#2224 <https://github.com/actions/runner/issues/2224>_
    for more details.

    Related issues and pull requests on GitHub:
    :issue:942.

  • Interpolation of the pip cache keys has been
    fixed by adding missing $ syntax
    in the GitHub Actions CI/CD workflow definition.

    Related issues and pull requests on GitHub:
    :issue:943.



Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 7de6b10 to 9e55b37 Compare March 17, 2025 18:54
@renovate renovate Bot changed the title Update dependency multidict to v6.1.0 Update dependency multidict to v6.2.0 Mar 17, 2025
@renovate renovate Bot changed the title Update dependency multidict to v6.2.0 Update dependency multidict to v6.3.0 Mar 31, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 9e55b37 to bb13ba4 Compare March 31, 2025 22:06
@renovate renovate Bot changed the title Update dependency multidict to v6.3.0 Update dependency multidict to v6.3.1 Apr 2, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from bb13ba4 to 60b1705 Compare April 2, 2025 01:18
@renovate renovate Bot changed the title Update dependency multidict to v6.3.1 Update dependency multidict to v6.2.0 Apr 2, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 60b1705 to 7455c9e Compare April 2, 2025 18:43
@renovate renovate Bot changed the title Update dependency multidict to v6.2.0 Update dependency multidict to v6.3.2 Apr 3, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 7455c9e to 1b3d030 Compare April 3, 2025 21:52
@renovate renovate Bot changed the title Update dependency multidict to v6.3.2 Update dependency multidict to v6.2.0 Apr 8, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch 2 times, most recently from c3e7c7a to aff1110 Compare April 9, 2025 19:32
@renovate renovate Bot changed the title Update dependency multidict to v6.2.0 Update dependency multidict to v6.4.0 Apr 9, 2025
@renovate renovate Bot changed the title Update dependency multidict to v6.4.0 Update dependency multidict to v6.4.2 Apr 9, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch 2 times, most recently from 1319fa5 to 135798a Compare April 10, 2025 22:36
@renovate renovate Bot changed the title Update dependency multidict to v6.4.2 Update dependency multidict to v6.4.3 Apr 10, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 135798a to f363d1e Compare May 19, 2025 20:50
@renovate renovate Bot changed the title Update dependency multidict to v6.4.3 Update dependency multidict to v6.4.4 May 19, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from f363d1e to aba97bc Compare June 17, 2025 19:25
@renovate renovate Bot changed the title Update dependency multidict to v6.4.4 Update dependency multidict to v6.5.0 Jun 17, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from aba97bc to 5d91b55 Compare June 24, 2025 22:45
@renovate renovate Bot changed the title Update dependency multidict to v6.5.0 Update dependency multidict to v6.5.1 Jun 24, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 5d91b55 to c3ed436 Compare June 27, 2025 10:34
@renovate renovate Bot changed the title Update dependency multidict to v6.5.1 Update dependency multidict to v6.6.0 Jun 27, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from c3ed436 to 0aabb9d Compare June 28, 2025 13:05
@renovate renovate Bot changed the title Update dependency multidict to v6.6.0 Update dependency multidict to v6.5.1 Jun 28, 2025
@renovate renovate Bot changed the title Update dependency multidict to v6.5.1 Update dependency multidict to v6.6.2 Jun 28, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 0aabb9d to 0eec5d9 Compare June 28, 2025 16:29
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 0eec5d9 to 5d6ae40 Compare June 30, 2025 16:15
@renovate renovate Bot changed the title Update dependency multidict to v6.6.2 Update dependency multidict to v6.6.3 Jun 30, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 5d6ae40 to 4042e9e Compare August 11, 2025 15:22
@renovate renovate Bot changed the title Update dependency multidict to v6.6.3 Update dependency multidict to v6.6.4 Aug 11, 2025
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 4042e9e to 27bca99 Compare October 6, 2025 16:26
@renovate renovate Bot changed the title Update dependency multidict to v6.6.4 Update dependency multidict to v6.7.0 Oct 6, 2025
@renovate renovate Bot changed the title Update dependency multidict to v6.7.0 Update dependency multidict to v6.7.1 Mar 1, 2026
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 27bca99 to 80c1c59 Compare March 1, 2026 15:55
@renovate
renovate Bot force-pushed the renovate/multidict-6.x branch from 80c1c59 to 00d31bd Compare September 9, 2026 18:02
@renovate renovate Bot changed the title Update dependency multidict to v6.7.1 Update dependency multidict to v6.8.0 Sep 9, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants